package com.cskaoyan._10final._04variable._04static;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/10 11:23
 **/
/*
final修饰静态的成员变量
    表示这是一个全局的常量,是唯一的
    语法上: final 数据类型 静态成员变量名;
    静态成员变量也不能用默认值
    静态成员变量初始化,赋值的手段:
        1.显式赋值
        2.静态代码块
        要求:
            使用这2种方式的任何一种都可以,但是只能选择一种
注意:
1.  final static 还是 static final 实测下来，都是可以的，根据个人习惯使用即可。
2.  final修饰静态成员变量是一个全局常量，
不会害怕外界访问和修改。所以在很多时候，它的访问权限修饰符都是public的。
3.  如果使用静态代码测试类加载，那么访问类的全局常量，有些场景是不完整的类加载的,
不是完整的类加载,静态代码块没有执行。（感兴趣自己测试一下，作为锻炼动手能力的小demo）
 */
public class Demo {
    public static void main(String[] args) {
        // new 对象进行类加载
        // A a = new A();

        // 访问类中的静态成员的时候
        System.out.println(A.a);
        // 不完整的类加载
    }
}

class Student{
    // 定义静态成员变量
    // Variable 'name' might not have been initialized
    // 没有初始化
    public final static String name = "张三";
    // 基本数据类型的静态成员变量

    public final static int a;
    static {
        // 通过静态代码块进行赋值;
        a = 10;
        // a = 20;
        // Cannot assign a value to final variable 'name'
        // name = "吴彦祖";
    }
}

class A{
    // 全局常量
    public final static int a = 1;

    static {
        System.out.println("A 的静态代码块执行了");
    }
}